iT邦幫忙

2025 iThome 鐵人賽

DAY 19
0
佛心分享-IT 人自學之術

OpwnCV影像處理新手村系列 第 19

🚀 DAY 19:直方圖反向投影(Histogram Backprojection)

  • 分享至 

  • xImage
  •  

直方圖反向投影是一種利用顏色分布找出特定區域的技術。
常用於目標檢測與追蹤,例如:從一張大圖中找出某個物體,或鎖定影片中出現的特定顏色範圍。此方法能根據顏色特徵快速定位目標。


🖼 測試圖片準備

請準備兩張圖片:

  • roi.jpg → 代表要找的目標(ROI,Region of Interest),例如房子與草地。
  • target.jpg → 包含目標的大場景,例如天空、山、房子、草地及河流。
    將兩張圖放在同一個資料夾。
import cv2

# 讀取 ROI(目標區域)與大圖
roi = cv2.imread('roi.jpg')
target = cv2.imread('target.jpg')

cv2.imshow('ROI', roi)
cv2.imshow('Target', target)

# 將以下程式碼放在所有顯示語句的最後面
cv2.waitKey()
cv2.destroyAllWindows()

這裡使用的原圖ROI如下

https://ithelp.ithome.com.tw/upload/images/20250920/201294829pfHYaTgZY.png

這裡使用的原圖target如下

https://ithelp.ithome.com.tw/upload/images/20250920/201294824tCqldeU8u.png


🔹 1. 設定 ROI 並計算其直方圖


# 轉換成 HSV 色彩空間
hsv_roi = cv2.cvtColor(roi, cv2.COLOR_BGR2HSV)
hsv_target = cv2.cvtColor(target, cv2.COLOR_BGR2HSV)
# 計算 ROI 的 HSV 直方圖(只針對 H 與 S 通道,忽略亮度)
roi_hist = cv2.calcHist([hsv_roi], [0, 1], None, [180, 256], [0, 180, 0, 256])
# 正規化到 0~255,提升匹配穩定性
roi_hist = cv2.normalize(roi_hist, roi_hist, 0, 255, cv2.NORM_MINMAX)

📌 參數說明

  • cv2.calcHist:計算指定通道的顏色分布直方圖。
  • cv2.normalize:將直方圖數值標準化,便於後續比對。

🔹 2. 執行直方圖反向投影


# 使用直方圖反向投影,找出 ROI 在 target 中的可能區域
dst = cv2.calcBackProject([hsv_target], [0, 1], roi_hist, [0, 180, 0, 256], 1)
# 應用濾波與閾值化,讓結果更清晰
disc = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5,5))
dst = cv2.filter2D(dst, -1, disc)
# 二值化
_, thresh = cv2.threshold(dst, 50, 255, cv2.THRESH_BINARY)
# 將二值化結果與原圖結合,僅保留匹配區域
res = cv2.bitwise_and(target, target, mask=thresh)

cv2.imshow('BackProjection', res)

https://ithelp.ithome.com.tw/upload/images/20250920/20129482vVQk0ZNkLC.png


🔹 3. 結果解讀

  • dst:顯示 ROI 在 target 內的「匹配程度」,灰階值越高代表越相似。
  • res:只保留匹配區域的彩色部分,便於目標定位。
    📌 這能幫助我們快速找出大圖中可能出現 ROI 的區域,適合用於目標追蹤、物件搜尋。

📊 方法比較

方法 說明
calcHist + equalizeHist 分析並改善亮度或對比度,適合整體影像增強
calcBackProject 根據顏色直方圖找出相似區域,適合目標追蹤與定位

比較:calcHist + equalizeHist 著重於影像整體亮度與對比度改善,calcBackProject 則專注於顏色分布的目標搜尋,適合用於物件追蹤與檢索。


📖 今日結語

直方圖反向投影是影像檢索與追蹤的基礎方法,特別適合用於顏色主導的物體偵測與定位。
雖然對光線變化較敏感,但搭配濾波、閾值化及其他方法,能成為強大的影像搜尋工具,廣泛應用於監控、目標追蹤、互動系統等場景。


上一篇
🚀 DAY 18:影像直方圖與直方圖均衡化(Histogram & Histogram Equalization)
下一篇
🚀 DAY 20:霍夫轉換直線檢測(Hough Line Transform)
系列文
OpwnCV影像處理新手村22
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言